#include "udp_server.hpp"
#include "err.hpp"
#include <memory>
#include <string>
#include <cstdio>
using namespace ns_server;

static void usage(std::string proc)
{
    std::cout << "Usage:\n\t" << proc << "port\n" << std::endl;
}

// //网络IO部分，与业务处理部分解耦!
// std::string transactionString(std::string request)
// {
//     //小写转大写
//     std::string res;
//     for (char ch : request)
//     {
//         res += toupper(ch);
//     }
//     return res;
// }

// static bool isPass(const std::string& cmd)
// {
//     //在cmd中查找是否有rm,kill等敏感命令
//     bool res = true;
//     if(cmd.find("rm") != std::string::npos
//         || cmd.find("kill") != std::string::npos
//         || cmd.find("mv") != std::string::npos)
//         res = false;

//     return res;
// }

// // man popen
// std::string excuteCommand(std::string cmd)
// {
//     // 1.防止恶意命令
//     if(!isPass(cmd))
//     {
//         return "You are so bad\n";
//     }

//     //2.处理命令并返回
//     FILE *fp = popen(cmd.c_str(), "r");
//     if(nullptr == fp)
//         return "NULL";
//     char line[1024];
//     std::string res;
//     while (fgets(line, sizeof(line), fp) != nullptr)
//         res += line;
//     return res;
// }

int main(int argc, char* argv[])
{
    if(argc != 2)
    {
        usage(argv[0]);
        exit(USAGE_ERR);
    }
    uint16_t port = atoi(argv[1]);
    // std::unique_ptr<UdpServer> pus(new UdpServer("127.0.0.0", port));
    // std::unique_ptr<UdpServer> pus(new UdpServer(transactionString, port));
    std::unique_ptr<UdpServer> pus(new UdpServer(port));
    pus->Start();
    return 0;
}